// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once  // 头文件保护宏，防止重复包含

#include "Engine/DataAsset.h"  // 包含数据资产基类
#include "Engine/DataTable.h"  // 包含数据表相关
#include "GameplayTagContainer.h"  // 包含GameplayTag容器

#include "LyraAccoladeDefinition.generated.h"  // 包含UE生成的代码

class UObject;  // 前向声明UObject类
class USoundBase;  // 前向声明USoundBase类

USTRUCT(BlueprintType)  // UE反射结构体，可在蓝图中使用
struct FLyraAccoladeDefinitionRow : public FTableRowBase  // 荣誉定义行结构体，继承自数据表行基类
{
	GENERATED_BODY()  // UE宏，生成反射代码体

public:
	// 要显示的消息
	UPROPERTY(EditAnywhere, BlueprintReadOnly)  // 属性：在任何地方可编辑，蓝图只读
	FText DisplayName;  // 显示名称

	// 要播放的声音
	UPROPERTY(EditAnywhere, BlueprintReadOnly)  // 属性：在任何地方可编辑，蓝图只读
	TSoftObjectPtr<USoundBase> Sound;  // 声音软引用指针

	// 要显示的图标	
	UPROPERTY(EditAnywhere, BlueprintReadOnly, meta=(DisplayThumbnail="true", AllowedClasses="Texture,MaterialInterface,SlateTextureAtlasInterface", DisallowedClasses="MediaTexture"))  // 属性：带元数据
	TSoftObjectPtr<UObject> Icon;  // 图标软引用指针

	// 显示此荣誉的持续时间（秒）
	UPROPERTY(EditAnywhere, BlueprintReadOnly)  // 属性：在任何地方可编辑，蓝图只读
	float DisplayDuration = 1.0f;  // 显示持续时间，默认1秒

	// 显示此荣誉的位置
	UPROPERTY(EditAnywhere, BlueprintReadOnly)  // 属性：在任何地方可编辑，蓝图只读
	FGameplayTag LocationTag;  // 位置标签

	// 与此荣誉关联的标签
	UPROPERTY(EditAnywhere, BlueprintReadOnly)  // 属性：在任何地方可编辑，蓝图只读
	FGameplayTagContainer AccoladeTags;  // 荣誉标签容器

	// 当显示此荣誉时，将移除任何具有这些标签的现有显示/待处理荣誉（例如，获得三杀将抑制双杀）
	UPROPERTY(EditAnywhere, BlueprintReadOnly)  // 属性：在任何地方可编辑，蓝图只读
	FGameplayTagContainer CancelAccoladesWithTag;  // 取消具有这些标签的荣誉
};

/**
 * 
 */
UCLASS(BlueprintType)  // UE反射类，可在蓝图中使用
class ULyraAccoladeDefinition : public UDataAsset  // 荣誉定义类，继承自数据资产
{
	GENERATED_BODY()  // UE宏，生成反射代码体

public:
	// 要播放的声音
	UPROPERTY(EditAnywhere, BlueprintReadOnly)  // 属性：在任何地方可编辑，蓝图只读
	TObjectPtr<USoundBase> Sound;  // 声音对象指针

	// 要显示的图标	
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(DisplayThumbnail="true", AllowedClasses="Texture,MaterialInterface,SlateTextureAtlasInterface", DisallowedClasses="MediaTexture"))  // 属性：带元数据，蓝图可读写
	TObjectPtr<UObject> Icon;  // 图标对象指针

	// 与此荣誉关联的标签
	UPROPERTY(EditAnywhere, BlueprintReadWrite)  // 属性：在任何地方可编辑，蓝图可读写
	FGameplayTagContainer AccoladeTags;  // 荣誉标签容器

	// 当显示此荣誉时，将移除任何具有这些标签的现有显示/待处理荣誉（例如，获得三杀将抑制双杀）
	UPROPERTY(EditAnywhere, BlueprintReadWrite)  // 属性：在任何地方可编辑，蓝图可读写
	FGameplayTagContainer CancelAccoladesWithTag;  // 取消具有这些标签的荣誉
};